\documentclass[12pt]{article}

\usepackage[table]{xcolor}
\usepackage{microtype}
\usepackage{graphicx}
\usepackage{hyperref}
\hypersetup{
    colorlinks,%
    citecolor=black,%
    filecolor=black,%
    linkcolor=black,%
    urlcolor=black
}
\pagestyle{plain}
\setcounter{secnumdepth}{2}

\topmargin=0cm
\oddsidemargin=0cm
\textheight=22.0cm
\textwidth=16cm
\parindent=0cm
\parskip=0.15cm
\topskip=0truecm
\raggedbottom
\abovedisplayskip=3mm
\belowdisplayskip=3mm
\abovedisplayshortskip=0mm
\belowdisplayshortskip=2mm
\normalbaselineskip=12pt
\normalbaselines

\begin{document}

\thispagestyle{empty}
\vspace*{0.5in}
\centerline{\bf\Large Requirements Document}

\vspace*{0.5in}
\centerline{\bf\Large Team 3}

\vspace*{0.5in}
\centerline{\bf\Large 30 January 2012}

%====================================================
% STUDENT NAMES TABLE
%====================================================
%
\vspace*{1.5in}
\begin{table}[htb]
\caption{Team}
\begin{center}
\begin{tabular}{|l | c|}
\hline
\multicolumn{1}{|c|}{Name} & \multicolumn{1}{|c|}{ID Number} \\
\hline\hline
Amer Alhalabi & 9067272 \\
Dmitriy Fingerman & 6436579 \\
Zoardar Golam & 1114441 \\
Rajwinder Kaur & 6282490 \\
Rolf Schmidt & 9538267 \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
\tableofcontents
%\clearpage
\listoffigures
%\clearpage
\listoftables

\clearpage

%====================================================
% SYSTEM
%====================================================
%
\section{System}

%====================================================
% PURPOSE
%====================================================
%
\subsection{Purpose}

The purpose of this document is to define the requirements for the Task Management System (TMS), a software application that helps individuals and businesses effectively organize their projects and tasks. This document provides an overview of the system and its environment and discusses all the features the TMS offers to its users. In addition, it contains functional requirements, constraints, and all use cases to help the developers implement the system and to aid testers perform testing activities. Finally, the document aims to furnish enough detail to project managers to define development schedules and release plans for the entire application.

%====================================================
% CONTEXT
%====================================================
%
\subsection{Context}

\begin{figure}[htb]
	\centering
		\includegraphics[width=0.6\textwidth]{img/context_diagram.png}
	\caption{Context diagram}
	\label{fig:context_diagram}
\end{figure}


In this context diagram (figure \ref{fig:context_diagram}), the information provided to and received from the Task Management System is identified. The closed boxes represent the set of sources and sinks of information.

The user interacts with the application through a graphical user interface. The input to the system is a file that contains a full description of the tasks. Each task has an identifier, a title, a (short) description, a duration, a deliverable, a deadline date, and a person assigned to the task. The output is composed of four views representing the tasks: 
\begin{samepage}
\begin{enumerate}
 \item a table view of the tasks, where each task has an identifier, a title, a (short) description, a duration, a deliverable, a deadline date, and a person assigned to the task
 \item a table view of the people, where each person has a name, a total number of hours assigned to them for the tasks, and a list of tasks assigned to them
 \item a tree view of the tasks (and subtasks) where subtrees can be expanded and collapsed
 \item a graph view of the tasks where the dependencies among tasks are shown
 \end{enumerate}
 \end{samepage}

Furthermore, tasks can be modified and deleted and new tasks can be added to the project. Finally, information about tasks and people can be exported.

\begin{figure}[htb]
	\centering
\includegraphics[width=0.6\textwidth]{img/block_diagram.png}
	\caption{Block diagram}
	\label{fig:block_diagram}
\end{figure}

This block diagram (figure \ref{fig:block_diagram}) presents a high level view of the TMS. It also shows how the TMS interacts with the file system to store and retrieve data.

Actions like loading data and modifying tasks are initiated through the user interface. \textit{Tasks} are responsible for loading/storing data, updating parts of the user interface (\textit{e.g.} task table, Gantt chart, etc.) and requesting \textit{People} to update. Files containing task information can be loaded or saved by this component.

\textit{People} update the people table in the user interface and load/store people information to the file system.


%====================================================
% BUSINESS GOALS
%====================================================
%
\subsection{Business Goals}
Task management software solutions are used to keep track of project tasks and their associated resources. In general, they are an integral part of the overall development process and if used properly support efficient workflows.

The business goal of the TMS is to improve the way the customer performs task management duties. Currently, the customer manages tasks using MS Excel and is obliged to perform all the work manually.

In the TMS, task management will follow the current workflow and automate manual tasks as much as possible. As the TMS will seamlessly integrate into the customer's workflow, the customer will require little to no training and feel familiar with the new system quickly.

In the new system, the customer expects to acquire convenient monitoring and control task management functionality like:

\begin{itemize}
\item modern, user-friendly interface
\item intuitive workflow (almost no learning curve)
\item single project management (consisting of tasks and subtasks)
\item unlimited level of detail for tasks and subtasks
\item workload analysis to optimize human resources
\item deadline and progress monitor
\item visualization of the project structure
\item critical path analysis
\item one-click view synchronization
\end{itemize}

\clearpage
%====================================================
% DOMAIN CONCEPTS
%====================================================
%
\clearpage
\section{Domain Concepts}

\begin{figure}[htb]
	\centering
		\includegraphics{img/domain_model.png}
	\caption{Domain model}
	\label{fig:domain_model}
\end{figure}

The Task Management System is a simple task manager that allows users to add Tasks (and subtasks) to a Project and define these tasks as illustrated in the domain model (figure \ref{fig:domain_model}).

The TaskTree of the Project contains a hierarchical list of all tasks and their subtasks. It guarantees that each Task has a unique ID and furthermore provides file handling to load and save itself.

A PeopleList will be generated and updated whenever a Task is added to the Project. The PeopleList contains a list of all the people that are assigned to at least one task and how much time it will take to complete the assigned Tasks.

The DependencyManager keeps track of the dependencies between Tasks, where one Task has to be finished before a second Task can begin. It serves to resolve temporal overlaps and circular dependencies.

A Task is defined by an ID, title, description, duration, deliverable, deadline and person assigned to the Task. Every Task can have any number of subtasks that constitute the Task and a dependent Task.

Every Task can be assigned to a Person that is in charge of completing the task and all of its subtasks. The workload (\textit{i.e.} the hours necessary to complete all assigned tasks) of a Person is available as well as a list of Tasks assigned to that Person.

\clearpage
%====================================================
% ACTORS
%====================================================
%

\section{Actors} \label{sec_actors}
\begin{table}[htb]
\caption{Actors}
\begin{center}
\begin{tabular}{|l| p{4.5in}|}
\hline
\multicolumn{1}{|c|}{Actor} & \multicolumn{1}{|c|}{Goals} \\
\hline
\multicolumn{1}{|l|}{} &  \\
\multicolumn{1}{|l|}{User}
&
\vspace*{-0.3in}
\begin{enumerate}
\item Save and load project data
\item View, add, modify and delete task information.
\item Export tasks and information about assigned people in CSV format for external use.
\end{enumerate} \\
\hline
\end{tabular}
\end{center}
\end{table}

The scope of the TMS is limited to a single user. There are no special setup and configuration requirements.

\clearpage
%====================================================
% USE CASES
%====================================================
%
\section{Use Cases}

\subsection{Overview}
The number of use cases for the TMS is small due to the simple nature of the project. As seen in section \ref{sec_actors}, there is only one user and seven use cases (see figure \ref{fig:use case diagram}) that will be presented in detail.

Broadly speaking, the use cases deal with two aspects of the TMS, storage (load and export) and task manipulation. In our case, create, read, update, and delete (CRUD) operations are described individually.

\begin{figure}[htb]
	\centering
		\includegraphics{img/use_case_diagram.png}
	\caption{Use case diagram}
	\label{fig:use case diagram}
\end{figure}


%====================================================
% USE CASES IN DETAIL
%====================================================
%
\subsection{Use Cases in Detail}

In the following, all use cases are described in detail.

%====================================================
% USE CASE 1 - LOAD PROJECT DATA
%====================================================
%
\begin{center}
\subsubsection{Use Case 1: Load Project Data} \label{uc:1}
\end{center}

\noindent
{\bf Name}\\
Load Project Data.

\noindent
{\bf Summary}\\
The user wants to load a list of tasks and subtasks from a file.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
None.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User requests to open a file.
\item User selects a file.
\item System displays the new project data.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in 
\renewcommand{\theenumi}{3a\arabic{enumi}} \setcounter{enumi}{0}
\item File is in wrong format.
\item System reports failure to the user.
\end{enumerate}
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in 
\renewcommand{\theenumi}{3b\arabic{enumi}} \setcounter{enumi}{0}
\item I/O error occurs.
\item System reports failure to the user.

\end{enumerate}

\noindent
{\bf Postcondition}\\
Project data has been displayed to the user.

\noindent

{\bf Priority}\\
High.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 1: Loading empty project file when system is empty.
\item ST Case 2: Loading empty project file when system is not empty.
\item ST Case 3: Loading non-empty project file when system is empty.
\item ST Case 4: Loading non-empty project file when system is not empty.
\item ST Case 5: Loading invalid project file.
\item ST Case 7: Saving non-empty project.
\item ST Case 8: Exporting tasks when no tasks are present.
\item ST Case 9: Exporting tasks when tasks are present in the system.
\item ST Case 10: Exporting people information when no tasks are present.
\item ST Case 13: Adding a task when the system is not empty.
\item ST Case 15: Adding a subtask under a selected task.
\item ST Case 17: Adding a subtask when no task or subtask is selected.
\item ST Case 18: Deleting a selected task which has subtasks.
\item ST Case 19: Deleting a selected task which has no subtasks.
\item ST Case 20: Deleting a selected subtask which has subtasks.
\item ST Case 21: Deleting a selected subtask which has no subtasks.
\item ST Case 22: Deleting when no task is selected.
\item ST Case 23: Modifying ID of a task
\item ST Case 24: Modifying ID of a subtask.
\item ST Case 25: Modifying title of a task.
\item ST Case 26: Modifying title of a subtask.
\item ST Case 27: Modifying description of a task.
\item ST Case 28: Modifying description of a subtask.
\item ST Case 29: Modifying duration of a task to higher than before.
\item ST Case 30: Modifying duration of a subtask to a lower one than parent subtask.
\item ST Case 31: Modifying duration of a subtask to a higher one than parent subtask and task.
\end{enumerate}

%====================================================
% USE CASE 2 - SHOW TASK
%====================================================
%
\begin{center}
\subsubsection{Use Case 2: Show Task} \label{uc:3}
\end{center}

\noindent
{\bf Name}\\
Show Task.

\noindent
{\bf Summary}\\
The user looks for detailed information about a specific task and its subtasks.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
The project contains at least one task.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User selects a task.
\item System displays information of the selected task and its subtasks.
\end{enumerate}

\noindent
{\bf Exceptions}\\
None.

\noindent
{\bf Postcondition}\\
Information of the selected task and its subtasks has been shown to the user.

\noindent

{\bf Priority}\\
High.

\noindent
{\bf Traces to Test Cases}\\
This Use Case is not tested as it relies on auto-generated code and is assumed to work properly.

%====================================================
% USE CASE 3 - ADD TASK
%====================================================
%
\begin{center}
\subsubsection{Use Case 3: Add Task} \label{uc:4}
\end{center}

\noindent
{\bf Name}\\
Add Task.

\noindent
{\bf Summary}\\
User would like to add a task to the project.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
None.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User requests to add a new task.
\item User provides information about the new task.
\item System displays the updated project data.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in 
\renewcommand{\theenumi}{3a\arabic{enumi}} \setcounter{enumi}{0}
\item Mandatory task information is missing.
\item System requests missing information.
\item User provides missing information.
\end{enumerate}

\noindent
{\bf Postcondition}\\
Updated project data has been shown to the user.

\noindent

{\bf Priority}\\
High.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 12: Adding a task when the system is empty.
\item ST Case 13: Adding a task when the system is not empty.
\item ST Case 14: Adding a subtask when the system is empty.
\item ST Case 15: Adding a subtask under a selected task.
\item ST Case 16: Adding a subtask under a selected subtask.
\item ST Case 17: Adding a subtask when no task or subtask is selected.
\end{enumerate}

%====================================================
% USE CASE 4 - DELETE TASK
%====================================================
%
\begin{center}
\subsubsection{Use Case 4: Delete Task} \label{uc:5}
\end{center}

\noindent
{\bf Name}\\
Delete Task.

\noindent
{\bf Summary}\\
The user wants to remove a task from the project.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
The project contains at least one task.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User selects a task.
\item User requests to delete the task.
\item System displays the updated project data without the deleted task.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in 
\renewcommand{\theenumi}{2a\arabic{enumi}} \setcounter{enumi}{0}
\item Delete failed.
\item System displays the initial project data.
\end{enumerate}

\noindent
{\bf Postcondition}\\
Updated project data has been shown to the user.

\noindent

{\bf Priority}\\
High.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 18: Deleting a selected task which has subtasks.
\item ST Case 19: Deleting a selected task which has no subtasks.
\item ST Case 20: Deleting a selected subtask which has subtasks.
\item ST Case 21: Deleting a selected subtask which has no subtasks.
\item ST Case 22: Deleting when no task is selected.
\end{enumerate}

%====================================================
% USE CASE 5 - MODIFY TASK
%====================================================
%
\begin{center}
\subsubsection{Use Case 5: Modify Task} \label{uc:6}
\end{center}

\noindent
{\bf Name}\\
Modify Task.

\noindent
{\bf Summary}\\
The user wants to modify task information.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
The project contains at least one task.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User selects a task.
\item User modifies task details.
\item System displays the updated project data.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in 
\renewcommand{\theenumi}{2a\arabic{enumi}} \setcounter{enumi}{0}
\item Modify failed.
\item System displays the initial project data.
\end{enumerate}

\noindent
{\bf Postcondition}\\
Updated project data has been shown to the user.

\noindent

{\bf Priority}\\
Medium.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 23: Modifying ID of a task                                                    
\item ST Case 24: Modifying ID of a subtask                                                 
\item ST Case 25: Modifying Title of a task                                                 
\item ST Case 26: Modifying Title of a subtask                                              
\item ST Case 27: Modifying Description of a task                                           
\item ST Case 28: Modifying Description of a subtask                                        
\item ST Case 29: Modifying Duration of a task to higher than before                        
\item ST Case 30: Modifying duration of a subtask to a lower one than parent subtask        
\item ST Case 31: Modifying duration of a subtask to higher one than parent subtask and task
\end{enumerate}

%====================================================
% USE CASE 6 - EXPORT TASKS
%====================================================
%
\begin{center}
\subsubsection{Use Case 6: Export Tasks} \label{uc:7}
\end{center}

\noindent
{\bf Name}\\
Export Tasks.

\noindent
{\bf Summary}\\
The user wants to save information about the tasks to a file.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
The project contains at least one task.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User requests to save project data to a file.
\item User enters a file name.
\item System indicates that the file has been saved.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in
\renewcommand{\theenumi}{3a\arabic{enumi}} \setcounter{enumi}{0}
\item I/O error occurs. 
\item System reports failure to the user.
\end{enumerate}

\noindent
{\bf Postcondition}\\
Information about tasks has been saved to a file.

\noindent

{\bf Priority}\\
Low.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 8: Exporting tasks when no tasks are present
\item ST Case 9: Exporting tasks when tasks are present in the system
\end{enumerate}

%====================================================
% USE CASE 7 - EXPORT PEOPLE
%====================================================
%
\begin{center}
\subsubsection{Use Case 7: Export People} \label{uc:8}
\end{center}

\noindent
{\bf Name}\\
Export People.

\noindent
{\bf Summary}\\
The user wants to save information about every person assigned to a task to a file.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
The project contains at least one task that is assigned to a person.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User requests to save information about people assigned to tasks to a file.
\item User enters a file name.
\item System indicates that the file has been saved.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in
\renewcommand{\theenumi}{3a\arabic{enumi}} \setcounter{enumi}{0}
\item  I/O error occurs.
\item System reports failure to the user.
\end{enumerate}

\noindent
{\bf Postcondition}\\
Information about persons assigned to tasks has been saved to a file.

\noindent

{\bf Priority}\\
Low.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 10: Exporting people information when no tasks are present
\item ST Case 11: Exporting people information when tasks are present in the system
\end{enumerate}

%====================================================
% USE CASE 1 - SAVE PROJECT DATA
%====================================================
%
\begin{center}
\subsubsection{Use Case 8: Save Project Data} \label{uc:1}
\end{center}

\noindent
{\bf Name}\\
Save Project Data.

\noindent
{\bf Summary}\\
The user wants to save the tasks and subtasks to a file.

\noindent
{\bf Actor}\\
User.

\noindent
{\bf Precondition}\\
None.

\noindent
{\bf Main Scenario}\\
\vspace*{-0.2in}
\begin{enumerate} \itemsep=-0.05in
\item User requests to save a file.
\item User selects a file.
\item System save the project data to the selected file.
\end{enumerate}

\noindent
{\bf Exceptions}\\
\vspace*{-0.3in}
\begin{enumerate} \itemsep=-0.05in 
\renewcommand{\theenumi}{3a\arabic{enumi}} \setcounter{enumi}{0}
\item I/O error occurs.
\item System reports failure to the user.

\end{enumerate}

\noindent
{\bf Postcondition}\\
Project data has been saved to a file.

\noindent

{\bf Priority}\\
Low.

\noindent
{\bf Traces to Test Cases}\\
\vspace*{-0.3in}
\begin{enumerate}
\item ST Case 6: Saving empty project.
\item ST Case 7: Saving non-empty project.
\end{enumerate}

\clearpage
%====================================================
% NON FUNCTIONAL CONSTRAINTS
%====================================================
%

\section{Non-Functional Constraints}

%====================================================
% PERFORMANCE 
%====================================================
%
\subsection{NF1: Performance}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & NF1 \\
\hline
Version & 1 \\
\hline
Requirement & TMS shall respond to user interactions with a maximal delay of 1 second. This requirement does not extend to disk I/O operations involved in import/export activities. \\
\hline
Rationale & User shall be satisfied with the product. GUI responsiveness is an important aspect of system usability which largely influences the user experience. \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & All \\
\hline
\end{tabular}
\end{center}
\end{table}

%====================================================
% DEVICE EFFICIENCY 
%====================================================
%
\subsection{NF2: Device Efficiency}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & NF2 \\
\hline
Version & 1 \\
\hline
Requirement & TMS shall not utilize significant CPU and memory resources on the target platforms and the use of resources shall grow with low linear dependence on the input size. \\
\hline
Rationale & TMS must not deteriorate overall performance of the user device. \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & All \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
%====================================================
% MAINTAINABILITY
%====================================================
%
\subsection{NF3: Maintainability}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & NF3 \\
\hline
Version & 1 \\
\hline
Requirement & Should the customer decide to change one of TMS views in the future (\textit{e.g.} add an additional view or remove one of the views), the change shall be limited to as small a number of TMS modules as possible. \\
\hline
Rationale & TMS must be capable to undergo possible future modifications in a cost effective manner.  \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Add Task, Delete Task, Modify Task, Show Task \\
\hline
\end{tabular}
\end{center}
\end{table}

%====================================================
% TRAINING
%====================================================
%
\subsection{NF4: Training}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & NF4 \\
\hline
Version & 1 \\
\hline
Requirement & The system shall be intuitive enough to be learned by an average computer user in 1 day. \\
\hline
Rationale & Migrating task management activities into the TMS must not impact the performance of users for more than 1 day. \\
\hline
Priority & Medium \\
\hline
Status & Implemented \\
\hline
Traces to use cases & All \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
%====================================================
% FUNCTIONAL REQUIREMENTS
%====================================================
%
\section{Functional Requirements}

%====================================================
% F1 - LOADING PROJECT DATA
%====================================================
%
\subsection{F1: Loading Project Data}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F1 \\
\hline
Version & 1 \\
\hline
Feature & Project Data Storage \\
\hline
Requirement & User shall be able to load project data from a file. \\
\hline
Rationale & User may decide to run the TMS anytime. It shall be possible to save/reload the project data across different runs of TMS. \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Load Project Data \\
\hline
\end{tabular}
\end{center}
\end{table}

%====================================================
% F2 - VIEWEING  TASK INFORMATION
%====================================================
%
\subsection{F2: Viewing Task Information}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F2 \\
\hline
Version & 1 \\
\hline
Feature & CRUD operations \\
\hline
Requirement & User shall be able to view detailed information about a specific task and its subtasks. \\
\hline
Rationale & Detailed task information cannot be shown about all tasks at the same time. User shall be able to focus on a task and view detailed information about it. \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Show Task \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
%====================================================
% F3 - ADDING TASK
%====================================================
%
\subsection{F3: Adding Task}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F3 \\
\hline
Version & 1 \\
\hline
Feature & CRUD operations \\
\hline
Requirement & User shall be able to add new tasks and subtasks. \\
\hline
Rationale & User may need to add a new task to the project. \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Add Task \\
\hline
\end{tabular}
\end{center}
\end{table}

%====================================================
% F4 - DELETING TASK
%====================================================
%
\subsection{F4: Deleting Task}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F4 \\
\hline
Version & 1 \\
\hline
Feature & CRUD operations \\
\hline
Requirement & User shall be able to delete a task or subtask. \\
\hline
Rationale & User may need to delete a task or subtask from the project. \\
\hline
Priority & High \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Delete Task \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
%====================================================
% F5 - MODIFYING TASK
%====================================================
%
\subsection{F5: Modifying Task}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F5 \\
\hline
Version & 1 \\
\hline
Feature & CRUD operations \\
\hline
Requirement & User shall be able to modify information of a task or subtask. \\
\hline
Rationale & User may need to change task information. \\
\hline
Priority & Medium \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Modify Task \\
\hline
\end{tabular}
\end{center}
\end{table}

%====================================================
% F6 - EXPORTING TASKS
%====================================================
%
\subsection{F6: Exporting Tasks}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F6 \\
\hline
Version & 1 \\
\hline
Feature & External Use \\
\hline
Requirement & User shall be able to save tasks and subtasks to a file in CSV or XML format. \\
\hline
Rationale & User may need task information from TMS for external use. \\
\hline
Priority & Low \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Export Tasks \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
%====================================================
% F7 - EXPORTING PEOPLE
%====================================================
%
\subsection{F7: Exporting People}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F7 \\
\hline
Version & 1 \\
\hline
Feature & External Use \\
\hline
Requirement & User shall be able to save people information to a file in CSV format. \\
\hline
Rationale & User may need information about people assigned to tasks and subtasks for external use. \\
\hline
Priority & Low \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Export People \\
\hline
\end{tabular}
\end{center}
\end{table}

%====================================================
% F8 - SAVING PROJECT DATA
%====================================================
%
\subsection{F8: Saving Project Data}
\hspace{10 mm}
\begin{table}[htb]
\begin{center}
\begin{tabular}{| l | p{3in} | }
\hline
%\rowcolor[gray]{0.6} 
ID & F8 \\
\hline
Version & 1 \\
\hline
Feature & Project Data Storage \\
\hline
Requirement & User shall be able to save project data to a file. \\
\hline
Rationale & User may decide to run the TMS anytime. It shall be possible to save/reload the project data across different runs of TMS. \\
\hline
Priority & Low \\
\hline
Status & Implemented \\
\hline
Traces to use cases & Save Project Data \\
\hline
\end{tabular}
\end{center}
\end{table}

\clearpage
%====================================================
% PLATFORM REQUIREMENTS
%====================================================
%
\section{Platform requirements}

The following is a brief list of platform requirements:

\begin{itemize}

\item
The user must have at least version 5 of the Java Runtime Environment installed

\item
The computer on which the application is installed should have a minimum of 15 MB free space on the hard drive and a minimum processor of type 200 MHz Pentium MMX.

\end{itemize}

\clearpage
%====================================================
% DATA DICTIONARY
%====================================================
%
\section{Data Dictionary}

\begin{description}
\item[CRUD] Create, Read, Update, Delete
\item[CSV] Comma-Separated Values
\item[F] Functional Requirement
\item[NF] Non-Functional Constraint
\item[TMS] Task Management System
\item[ST] System Test
\end{description}

\clearpage
%====================================================
% REFERENCES
%====================================================
%
\section{References}
\begin{enumerate}
\item Roger S. Pressman, Software Engineering: A Practitioner's Approach, McGraw-Hill, 2009, 7\textsuperscript{th} edition
\item Timothy C. Lethbridge and Robert Lagani�re, Object-Oriented Software Engineering: 
Practical Software Development using UML and Java, McGraw-Hill, 2001, 2\textsuperscript{nd} Edition
\end{enumerate}

\clearpage
%====================================================
% APPENDIX
%====================================================
%
\appendix

%====================================================
% FILE FORMATS - TASKS
%====================================================
%
\section{Description of File Format: Tasks}

The project file for the TMS is an Extensible Markup Language (XML) file that defines tasks and subtasks as well as subtask relationships and dependency relationships. The following table shows the mandatory nodes for every task and subtask and their data type.

\begin{table}[htb]
	\centering
		\begin{tabular}{ | l | l | l | }
		\hline
		\rowcolor[gray]{0.6} Task & Subtask & Data type\\
		\hline
ID & ID & Integer\\ \hline
Title & Title & String\\ \hline
Description & Description & String\\ \hline
Duration & & Integer\\ \hline
Deliverable & & String\\ \hline
Deadline & & Date\\ \hline
Person & & String\\ \hline
		\end{tabular}
	\caption{Nodes for tasks and subtasks}
	\label{tab:NodesForTasksAndSubtasks}
\end{table}

Each task can also have a \textit{Before} node of type Integer (the ID of the connected task) that shows its dependency relationship with another task. In order to define the subtask relationships, both tasks and subtasks have an optional subtasks node that contains a number of subtask nodes.

The following is the XSD that describes XML input files for the TMS:

\footnotesize
\begin{verbatim}
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="data">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" ref="task"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="task">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="id"/>
                <xs:element ref="title"/>
                <xs:element ref="description"/>
                <xs:element ref="duration"/>
                <xs:element ref="deadline"/>
                <xs:element ref="deliverable"/>
                <xs:element ref="person"/>
                <xs:element ref="before"/>
                <xs:element minOccurs="0" ref="subtasks"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="subtask">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="id"/>
                <xs:element ref="title"/>
                <xs:element ref="description"/>
                <xs:element ref="duration"/>
                <xs:element ref="deadline"/>
                <xs:element ref="deliverable"/>
                <xs:element ref="person"/>
                <xs:element ref="before"/>
                <xs:element minOccurs="0" ref="subtasks"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="id" type="xs:integer"/>
    <xs:element name="title" type="xs:string"/>
    <xs:element name="description" type="xs:string"/>
    <xs:element name="duration" type="xs:integer"/>
    <xs:element name="deadline" type="xs:date"/>
    <xs:element name="deliverable" type="xs:string"/>
    <xs:element name="person" type="xs:string"/>
    <xs:element name="before" type="xs:integer"/>
    <xs:element name="subtasks">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="subtask"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
\end{verbatim}
\normalsize

%====================================================
% FILE FORMATS - PERSONS
%====================================================
%
\section{Description of File Format: Persons}

The output files for all tasks and people are comma-separated values (CSV) files. In this case, the file consists of a header row (defining 9 columns, see below) and rows containing the details for every task and subtask in the project.

The following is the header of the tasks output file:

\footnotesize
\begin{verbatim}
ID,ParentID,Title,Description,Before,Duration,Deliverable,Deadline,Person
\end{verbatim}
\normalsize

Contrary to XML files, CSV files are so called flat files (\textit{e.g.} they cannot express the tree like structure of XML files) and therefore the ParentID column is required. This column contains the ID of the parent of the subtask and is empty for tasks as they all have the root node as parent.

As mentioned above, every task is described in one row of the CSV file. If a task contains any subtasks, these subtasks are described in the rows immediately following the task, before the next task. The same is true for subtasks: if a subtask contains subtasks, their descriptions immediately follow the subtask description. This means that a task and its subtask relationships is fully described before the next task.

The CSV output file for the people is rather simple compared to the tasks file as it contains only three columns. Here is the header:

\footnotesize
\begin{verbatim}
Person,Hours,Tasks
\end{verbatim}
\normalsize

\textit{Person} contains the name of the person, \textit{Hours} the number of hours for all tasks assigned to this person and \textit{Tasks} is a comma-separated list of all tasks this person is assigned to.

\end{document}


